﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Didsoft.DUA.AccesoDatos.Entidades;
using Didsoft.DUA.Negocios;
using Didsoft.DUA.Negocios.Servicios;
using SIOGDE.Negocios.Servicios;

namespace SIOGDE.Web.Areas.DUA.Controllers
{
    public class RegisterController : Controller
    {
        //
        // GET: /DUA/Register/

        public ActionResult Index()
        {
            return View();
        }

    }
    public class UsuarioController : Didsoft.DUA.Web.Controllers.UsuarioController
    {
        //public UsuarioController()
        //{
        //    EditedRedirectAction = "FilterList";
        //}

        //public ActionResult Redirector(int ide = 0)
        //{
        //    return RedirectToAction("DataForm", new { ide = Didsoft.Mvc.Security.WebUtils.Encrypt(ide.ToString()) });
        //}


        public ActionResult ByRole(string ide = "")
        {
            int roleId = 0;
            try 
	        {
                roleId = Convert.ToInt32(Didsoft.Mvc.Security.WebUtils.Decrypt(ide));
	        }
	        catch (Exception)
	        {
                roleId = 0;	        
	        }
            
            ViewBag.RoleId = roleId;
            return View();
        }


        [HttpPost]
        public JsonResult JSONPagedListByRol(string filter = "", int roleId = 0, int jtStartIndex = 0, int jtPageSize = 0, string jtSorting = null)
        {
            try
            {               
                var usuarioNegocios = new Didsoft.DUA.Negocios.DUA_UsuarioNegocios();
                var searchedItems = usuarioNegocios.GetUsersByRoleAndUserFilter(roleId,filter, jtPageSize, jtStartIndex);

                return Json(new { Result = "OK", 
                    Records = searchedItems.Items.Select(e => new 
                    {
                       Id = e.Id,
                       UserName = e.Nombre,
                       Password = e.Contrasena,
                       Person = BusinessFactory.Current.GetPersonaNegocios().ObtenerPorId(e.Persona.Id).NombreCompleto,
                       Locked = e.Bloqueado,
                       ChangedPassword = e.HaCambiadoContraseña,
                       Role = e.Rol.Nombre
                    }),
                    TotalRecordCount = searchedItems.Count });
            }
            catch (Exception ex)
            {
                return Json(new { Result = "ERROR", Message = ex.Message });
            }
        }


        public ActionResult ActualizarUsuarioModal(string personGuid, string redireccion)
        {
            SIOGDE.Negocios.PersonaNegocios personaNegocios = new Negocios.PersonaNegocios();
            var person = personaNegocios.GetByGuid(personGuid);
            
            IDUA_UsuarioNegociosServicio usuarioService = new DUA_UsuarioNegocios();
            var usuario = usuarioService.GetUsersByPersonId(person.Id).FirstOrDefault();

            IDUA_RolNegociosServicio rolService = new DUA_RolNegocios();
            var roles = rolService.ObtenerTodas().Where(p => p.Id > 3);
            ViewBag.Roles = new SelectList(roles, "Id", "Nombre", usuario!=null?usuario.Rol.Id : 0);
            ViewBag.Redireccion = redireccion;

            if (usuario == null)
            {
                usuario = new Didsoft.DUA.AccesoDatos.Entidades.DUA_Usuario();
                usuario.Persona = person;
                usuario.Rol = roles.FirstOrDefault();
            }
            
            return View(usuario);
        }

        [HttpPost]
        public ActionResult ActualizarUsuarioModal(DUA_Usuario entity, string redireccion)
        { 
            try
            {
                SIOGDE.AccesoDatos.Entidades.Persona persona = BusinessFactory.Current.GetPersonaNegocios().ObtenerPorId(entity.PersonaId_FK);
                entity.PreguntaSeguridad = persona.NombreCompleto;
                entity.RespuestaSeguridad = persona.NombreCompleto;                
                IDUA_UsuarioNegociosServicio usuarioService = new DUA_UsuarioNegocios();
                var entityCreated = usuarioService.Guardar(entity);

                return Redirect(redireccion);
            }
            catch (Exception ex)
            {
                return Redirect("../../Menu");
            }
        
        }

        [HttpPost]
        public JsonResult JSONSaveViewModel(DUA_Usuario entity)
        {
            try
            {
                SIOGDE.AccesoDatos.Entidades.Persona persona = BusinessFactory.Current.GetPersonaNegocios().ObtenerPorId(entity.PersonaId_FK);
                entity.PreguntaSeguridad = persona.NombreCompleto;
                entity.RespuestaSeguridad = persona.NombreCompleto;
                IDUA_UsuarioNegociosServicio usuarioService = new DUA_UsuarioNegocios();
                var entityCreated = usuarioService.Guardar(entity);
                
                return Json(new { Result = "OK", Record = entityCreated });
            }
            catch (Exception ex)
            {
                return Json(new { Result = "ERROR", Message = ex.Message });
            }
        }



    }
    
    public class AccesoController : Didsoft.DUA.Web.Controllers.AccesoMaestroController
    { }

    public class AccesoLiteController : Didsoft.DUA.Web.Controllers.AccesoController
    {
        public AccesoLiteController()
        {
            DropdownListStringsProp = "AccesoMaestro.Nombre,Accion";
        }
    }

    public class RolController : Didsoft.DUA.Web.Controllers.RolController
    { }
    
    public class RegionController : Didsoft.DUA.Web.Controllers.DUA_RegionController
    { }

    public class SesionController : Didsoft.DUA.Web.Controllers.SesionUsuarioController
    { }

    public class HistoriaSesionController : Didsoft.DUA.Web.Controllers.HistorialSesionController
    { }


}
